package service

import (
	sqlc "bgs/db/sqlc"
	"bgs/util"
	"context"

	"database/sql"
)

// EnsureExt 确保用户的扩展信息并返回
func (s *UserServiceImp) EnsureExt(ctx context.Context, q *sqlc.Queries, withLock bool, userID int64) (userExt sqlc.UserExt, err error) {
	slog := util.NewContextLogger(ctx, s.slog)
	var sqlErr error
	if withLock {
		userExt, sqlErr = q.GetUserExtByUserIDToLock(ctx, userID)
	} else {
		userExt, sqlErr = q.GetUserExtByUserID(ctx, userID)
	}

	if sqlErr != nil {
		if sql.ErrNoRows == sqlErr {
			userExt, err = q.UpsertUserExt(ctx, sqlc.UpsertUserExtParams{
				UserID:               userID,
			})
			if err != nil {
				return
			}
		} else {
			err = sqlErr
			return
		}
	}
	slog.Infof("确保用户的扩展信息并返回 ok")
	return
}